// 词汇游戏后端API封装服务

import { api } from '@/api/internal-api/internal-api';

const API_PREFIX = '/user/subject/english/vocabulary';

/**
 * 词汇相关API服务
 * 封装所有与后端的交互逻辑
 */
export const vocabularyApi = {
	API_PREFIX,
    /**
     * 获取所有词汇本列表
     * @returns {Promise<Array>} 词汇本列表
     */
    async getVocabBooks() {
        try {
            const response = await api.get(`${API_PREFIX}/books`);

            // 验证响应格式
            if (!Array.isArray(response.data)) {
                throw new Error('词汇本列表格式不正确，应为数组');
            }

            // 标准化数据格式
            return response.data.map(book => ({
                bookId: Number(book.id),
                bookName: book.name || `词汇本 ${book.id}`
            })).filter(book => book.bookId > 0);
        } catch (error) {
            console.error('词汇本获取失败:', error);
            // 统一错误处理，返回用户友好信息
            throw new Error(error.message || '获取词汇本时发生错误，请稍后重试');
        }
    },

    /**
     * 根据词汇本ID获取单词列表
     * @param {number} bookId - 词汇本ID
     * @returns {Promise<Array>} 单词列表
     */
    async getWordsByBookId(bookId) {
        // 参数验证
        if (typeof bookId !== 'number' || isNaN(bookId) || bookId <= 0) {
            throw new Error('无效的词汇本ID，必须是正整数');
        }

        try {
            const response = await api.get(`${API_PREFIX}/book/${bookId}`);
            const rawData = response.data;
            const words = Array.isArray(rawData.words) ? rawData.words : [];

            // 标准化单词数据格式
            return words.map(word => ({
                id: Number(word.wordId),
                word: word.spell || '',
                pronunciation: word.pronunciation || '无音标',
                // 重点：优先读取后端的 briefDefinitions 字段
                definition: word.briefDefinitions || word.definition || '无释义',
                example: word.example || '无例句',
                chinese: word.chinese || '',
                category: word.category
            })).filter(word => word.word && word.definition); // 过滤无效单词
        } catch (error) {
            console.error(`获取词汇本 ${bookId} 的单词失败:`, error);
            // 统一错误处理，返回用户友好信息
            throw new Error(error.message || '获取单词时发生错误，请稍后重试');
        }
    }
};
